Import gcc-4.4.1
[dragonfly.git] / contrib / gcc-4.4 / libstdc++-v3 / include / tr1_impl / cmath
1 // TR1 cmath -*- C++ -*-
2
3 // Copyright (C) 2007, 2009 Free Software Foundation, Inc.
4 //
5 // This file is part of the GNU ISO C++ Library.  This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 3, or (at your option)
9 // any later version.
10
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 // GNU General Public License for more details.
15
16 // Under Section 7 of GPL version 3, you are granted additional
17 // permissions described in the GCC Runtime Library Exception, version
18 // 3.1, as published by the Free Software Foundation.
19
20 // You should have received a copy of the GNU General Public License and
21 // a copy of the GCC Runtime Library Exception along with this program;
22 // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23 // <http://www.gnu.org/licenses/>.
24
25 /** @file tr1_impl/cmath
26  *  This is an internal header file, included by other library headers.
27  *  You should not attempt to use it directly.
28  */
29
30 #if _GLIBCXX_USE_C99_MATH_TR1
31
32 #undef acosh
33 #undef acoshf
34 #undef acoshl
35 #undef asinh
36 #undef asinhf
37 #undef asinhl
38 #undef atanh
39 #undef atanhf
40 #undef atanhl
41 #undef cbrt
42 #undef cbrtf
43 #undef cbrtl
44 #undef copysign
45 #undef copysignf
46 #undef copysignl
47 #undef erf
48 #undef erff
49 #undef erfl
50 #undef erfc
51 #undef erfcf
52 #undef erfcl
53 #undef exp2
54 #undef exp2f
55 #undef exp2l
56 #undef expm1
57 #undef expm1f
58 #undef expm1l
59 #undef fdim
60 #undef fdimf
61 #undef fdiml
62 #undef fma
63 #undef fmaf
64 #undef fmal
65 #undef fmax
66 #undef fmaxf
67 #undef fmaxl
68 #undef fmin
69 #undef fminf
70 #undef fminl
71 #undef hypot
72 #undef hypotf
73 #undef hypotl
74 #undef ilogb
75 #undef ilogbf
76 #undef ilogbl
77 #undef lgamma
78 #undef lgammaf
79 #undef lgammal
80 #undef llrint
81 #undef llrintf
82 #undef llrintl
83 #undef llround
84 #undef llroundf
85 #undef llroundl
86 #undef log1p
87 #undef log1pf
88 #undef log1pl
89 #undef log2
90 #undef log2f
91 #undef log2l
92 #undef logb
93 #undef logbf
94 #undef logbl
95 #undef lrint
96 #undef lrintf
97 #undef lrintl
98 #undef lround
99 #undef lroundf
100 #undef lroundl
101 #undef nan
102 #undef nanf
103 #undef nanl
104 #undef nearbyint
105 #undef nearbyintf
106 #undef nearbyintl
107 #undef nextafter
108 #undef nextafterf
109 #undef nextafterl
110 #undef nexttoward
111 #undef nexttowardf
112 #undef nexttowardl
113 #undef remainder
114 #undef remainderf
115 #undef remainderl
116 #undef remquo
117 #undef remquof
118 #undef remquol
119 #undef rint
120 #undef rintf
121 #undef rintl
122 #undef round
123 #undef roundf
124 #undef roundl
125 #undef scalbln
126 #undef scalblnf
127 #undef scalblnl
128 #undef scalbn
129 #undef scalbnf
130 #undef scalbnl
131 #undef tgamma
132 #undef tgammaf
133 #undef tgammal
134 #undef trunc
135 #undef truncf
136 #undef truncl
137
138 #endif
139
140 namespace std
141 {
142 _GLIBCXX_BEGIN_NAMESPACE_TR1
143
144 #if _GLIBCXX_USE_C99_MATH_TR1
145
146   // types
147   using ::double_t;
148   using ::float_t;
149
150   // functions
151   using ::acosh;
152   using ::acoshf;
153   using ::acoshl;
154
155   using ::asinh;
156   using ::asinhf;
157   using ::asinhl;
158
159   using ::atanh;
160   using ::atanhf;
161   using ::atanhl;
162
163   using ::cbrt;
164   using ::cbrtf;
165   using ::cbrtl;
166
167   using ::copysign;
168   using ::copysignf;
169   using ::copysignl;
170
171   using ::erf;
172   using ::erff;
173   using ::erfl;
174
175   using ::erfc;
176   using ::erfcf;
177   using ::erfcl;
178
179   using ::exp2;
180   using ::exp2f;
181   using ::exp2l;
182
183   using ::expm1;
184   using ::expm1f;
185   using ::expm1l;
186
187   using ::fdim;
188   using ::fdimf;
189   using ::fdiml;
190
191   using ::fma;
192   using ::fmaf;
193   using ::fmal;
194
195   using ::fmax;
196   using ::fmaxf;
197   using ::fmaxl;
198
199   using ::fmin;
200   using ::fminf;
201   using ::fminl;
202
203   using ::hypot;
204   using ::hypotf;
205   using ::hypotl;
206
207   using ::ilogb;
208   using ::ilogbf;
209   using ::ilogbl;
210
211   using ::lgamma;
212   using ::lgammaf;
213   using ::lgammal;
214
215   using ::llrint;
216   using ::llrintf;
217   using ::llrintl;
218
219   using ::llround;
220   using ::llroundf;
221   using ::llroundl;
222
223   using ::log1p;
224   using ::log1pf;
225   using ::log1pl;
226
227   using ::log2;
228   using ::log2f;
229   using ::log2l;
230
231   using ::logb;
232   using ::logbf;
233   using ::logbl;
234
235   using ::lrint;
236   using ::lrintf;
237   using ::lrintl;
238
239   using ::lround;
240   using ::lroundf;
241   using ::lroundl;
242
243   using ::nan;
244   using ::nanf;
245   using ::nanl;
246
247   using ::nearbyint;
248   using ::nearbyintf;
249   using ::nearbyintl;
250
251   using ::nextafter;
252   using ::nextafterf;
253   using ::nextafterl;
254
255   using ::nexttoward;
256   using ::nexttowardf;
257   using ::nexttowardl;
258
259   using ::remainder;
260   using ::remainderf;
261   using ::remainderl;
262
263   using ::remquo;
264   using ::remquof;
265   using ::remquol;
266
267   using ::rint;
268   using ::rintf;
269   using ::rintl;
270
271   using ::round;
272   using ::roundf;
273   using ::roundl;
274
275   using ::scalbln;
276   using ::scalblnf;
277   using ::scalblnl;
278
279   using ::scalbn;
280   using ::scalbnf;
281   using ::scalbnl;
282
283   using ::tgamma;
284   using ::tgammaf;
285   using ::tgammal;
286
287   using ::trunc;
288   using ::truncf;
289   using ::truncl;
290
291 #endif
292
293 #if _GLIBCXX_USE_C99_MATH
294 #if !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
295
296   /// Function template definitions [8.16.3].
297   using std::signbit;
298   
299   using std::fpclassify;
300
301   using std::isfinite;
302   using std::isinf;
303   using std::isnan;
304   using std::isnormal;
305
306   using std::isgreater;
307   using std::isgreaterequal;
308   using std::isless;
309   using std::islessequal;
310   using std::islessgreater;
311   using std::isunordered;
312 #endif
313 #endif
314
315 #if _GLIBCXX_USE_C99_MATH_TR1
316
317   /// Additional overloads [8.16.4].
318   using std::acos;
319
320   inline float
321   acosh(float __x)
322   { return __builtin_acoshf(__x); }
323
324   inline long double
325   acosh(long double __x)
326   { return __builtin_acoshl(__x); }
327
328   template<typename _Tp>
329     inline typename __gnu_cxx::__promote<_Tp>::__type 
330     acosh(_Tp __x)
331     {
332       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
333       return acosh(__type(__x));
334     }
335
336   using std::asin;
337
338   inline float
339   asinh(float __x)
340   { return __builtin_asinhf(__x); }
341
342   inline long double
343   asinh(long double __x)
344   { return __builtin_asinhl(__x); }
345
346   template<typename _Tp>
347     inline typename __gnu_cxx::__promote<_Tp>::__type 
348     asinh(_Tp __x)
349     {
350       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
351       return asinh(__type(__x));
352     }
353
354   using std::atan;
355   using std::atan2;
356
357   inline float
358   atanh(float __x)
359   { return __builtin_atanhf(__x); }
360
361   inline long double
362   atanh(long double __x)
363   { return __builtin_atanhl(__x); }
364
365   template<typename _Tp>
366     inline typename __gnu_cxx::__promote<_Tp>::__type 
367     atanh(_Tp __x)
368     {
369       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
370       return atanh(__type(__x));
371     }
372
373   inline float
374   cbrt(float __x)
375   { return __builtin_cbrtf(__x); }
376
377   inline long double
378   cbrt(long double __x)
379   { return __builtin_cbrtl(__x); }
380
381   template<typename _Tp>
382     inline typename __gnu_cxx::__promote<_Tp>::__type 
383     cbrt(_Tp __x)
384     {
385       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
386       return cbrt(__type(__x));
387     }
388
389   using std::ceil;
390
391   inline float
392   copysign(float __x, float __y)
393   { return __builtin_copysignf(__x, __y); }
394
395   inline long double
396   copysign(long double __x, long double __y)
397   { return __builtin_copysignl(__x, __y); }
398
399   template<typename _Tp, typename _Up>
400     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
401     copysign(_Tp __x, _Up __y)
402     {
403       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
404       return copysign(__type(__x), __type(__y));
405     }
406
407   using std::cos;
408   using std::cosh;  
409
410   inline float
411   erf(float __x)
412   { return __builtin_erff(__x); }
413
414   inline long double
415   erf(long double __x)
416   { return __builtin_erfl(__x); }
417
418   template<typename _Tp>
419     inline typename __gnu_cxx::__promote<_Tp>::__type 
420     erf(_Tp __x)
421     {
422       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
423       return erf(__type(__x));
424     }
425
426   inline float
427   erfc(float __x)
428   { return __builtin_erfcf(__x); }
429
430   inline long double
431   erfc(long double __x)
432   { return __builtin_erfcl(__x); }
433
434   template<typename _Tp>
435     inline typename __gnu_cxx::__promote<_Tp>::__type 
436     erfc(_Tp __x)
437     {
438       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
439       return erfc(__type(__x));
440     }
441
442   using std::exp;
443
444   inline float
445   exp2(float __x)
446   { return __builtin_exp2f(__x); }
447
448   inline long double
449   exp2(long double __x)
450   { return __builtin_exp2l(__x); }
451
452   template<typename _Tp>
453     inline typename __gnu_cxx::__promote<_Tp>::__type 
454     exp2(_Tp __x)
455     {
456       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
457       return exp2(__type(__x));
458     }
459
460   inline float
461   expm1(float __x)
462   { return __builtin_expm1f(__x); }
463
464   inline long double
465   expm1(long double __x)
466   { return __builtin_expm1l(__x); }
467
468   template<typename _Tp>
469     inline typename __gnu_cxx::__promote<_Tp>::__type 
470     expm1(_Tp __x)
471     {
472       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
473       return expm1(__type(__x));
474     }
475
476   using std::fabs;
477
478   inline float
479   fdim(float __x, float __y)
480   { return __builtin_fdimf(__x, __y); }
481
482   inline long double
483   fdim(long double __x, long double __y)
484   { return __builtin_fdiml(__x, __y); }
485
486   template<typename _Tp, typename _Up>
487     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
488     fdim(_Tp __x, _Up __y)
489     {
490       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
491       return fdim(__type(__x), __type(__y));
492     }
493
494   using std::floor;
495
496   inline float
497   fma(float __x, float __y, float __z)
498   { return __builtin_fmaf(__x, __y, __z); }
499
500   inline long double
501   fma(long double __x, long double __y, long double __z)
502   { return __builtin_fmal(__x, __y, __z); }
503
504   template<typename _Tp, typename _Up, typename _Vp>
505     inline typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type
506     fma(_Tp __x, _Up __y, _Vp __z)
507     {
508       typedef typename __gnu_cxx::__promote_3<_Tp, _Up, _Vp>::__type __type;
509       return fma(__type(__x), __type(__y), __type(__z));
510     }
511
512   inline float
513   fmax(float __x, float __y)
514   { return __builtin_fmaxf(__x, __y); }
515
516   inline long double
517   fmax(long double __x, long double __y)
518   { return __builtin_fmaxl(__x, __y); }
519
520   template<typename _Tp, typename _Up>
521     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
522     fmax(_Tp __x, _Up __y)
523     {
524       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
525       return fmax(__type(__x), __type(__y));
526     }
527
528   inline float
529   fmin(float __x, float __y)
530   { return __builtin_fminf(__x, __y); }
531
532   inline long double
533   fmin(long double __x, long double __y)
534   { return __builtin_fminl(__x, __y); }
535
536   template<typename _Tp, typename _Up>
537     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
538     fmin(_Tp __x, _Up __y)
539     {
540       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
541       return fmin(__type(__x), __type(__y));
542     }
543
544   using std::fmod;
545   using std::frexp;
546
547   inline float
548   hypot(float __x, float __y)
549   { return __builtin_hypotf(__x, __y); }
550
551   inline long double
552   hypot(long double __x, long double __y)
553   { return __builtin_hypotl(__x, __y); }
554
555   template<typename _Tp, typename _Up>
556     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
557     hypot(_Tp __x, _Up __y)
558     {
559       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
560       return hypot(__type(__x), __type(__y));
561     }
562
563   inline int
564   ilogb(float __x)
565   { return __builtin_ilogbf(__x); }
566
567   inline int
568   ilogb(long double __x)
569   { return __builtin_ilogbl(__x); }
570
571   template<typename _Tp>
572     inline int
573     ilogb(_Tp __x)
574     {
575       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
576       return ilogb(__type(__x));
577     }
578
579   using std::ldexp;
580
581   inline float
582   lgamma(float __x)
583   { return __builtin_lgammaf(__x); }
584
585   inline long double
586   lgamma(long double __x)
587   { return __builtin_lgammal(__x); }
588
589   template<typename _Tp>
590     inline typename __gnu_cxx::__promote<_Tp>::__type 
591     lgamma(_Tp __x)
592     {
593       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
594       return lgamma(__type(__x));
595     }
596
597   inline long long
598   llrint(float __x)
599   { return __builtin_llrintf(__x); }
600
601   inline long long
602   llrint(long double __x)
603   { return __builtin_llrintl(__x); }
604
605   template<typename _Tp>
606     inline long long
607     llrint(_Tp __x)
608     {
609       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
610       return llrint(__type(__x));
611     }
612
613   inline long long
614   llround(float __x)
615   { return __builtin_llroundf(__x); }
616
617   inline long long
618   llround(long double __x)
619   { return __builtin_llroundl(__x); }
620
621   template<typename _Tp>
622     inline long long
623     llround(_Tp __x)
624     {
625       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
626       return llround(__type(__x));
627     }
628
629   using std::log;
630   using std::log10;
631
632   inline float
633   log1p(float __x)
634   { return __builtin_log1pf(__x); }
635
636   inline long double
637   log1p(long double __x)
638   { return __builtin_log1pl(__x); }
639
640   template<typename _Tp>
641     inline typename __gnu_cxx::__promote<_Tp>::__type 
642     log1p(_Tp __x)
643     {
644       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
645       return log1p(__type(__x));
646     }
647
648   // DR 568.
649   inline float
650   log2(float __x)
651   { return __builtin_log2f(__x); }
652
653   inline long double
654   log2(long double __x)
655   { return __builtin_log2l(__x); }
656
657   template<typename _Tp>
658     inline typename __gnu_cxx::__promote<_Tp>::__type 
659     log2(_Tp __x)
660     {
661       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
662       return log2(__type(__x));
663     }
664
665   inline float
666   logb(float __x)
667   { return __builtin_logbf(__x); }
668
669   inline long double
670   logb(long double __x)
671   { return __builtin_logbl(__x); }
672
673   template<typename _Tp>
674     inline typename __gnu_cxx::__promote<_Tp>::__type 
675     logb(_Tp __x)
676     {
677       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
678       return logb(__type(__x));
679     }
680
681   inline long
682   lrint(float __x)
683   { return __builtin_lrintf(__x); }
684
685   inline long
686   lrint(long double __x)
687   { return __builtin_lrintl(__x); }
688
689   template<typename _Tp>
690     inline long
691     lrint(_Tp __x)
692     {
693       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
694       return lrint(__type(__x));
695     }
696
697   inline long
698   lround(float __x)
699   { return __builtin_lroundf(__x); }
700
701   inline long
702   lround(long double __x)
703   { return __builtin_lroundl(__x); }
704
705   template<typename _Tp>
706     inline long
707     lround(_Tp __x)
708     {
709       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
710       return lround(__type(__x));
711     }
712
713   inline float
714   nearbyint(float __x)
715   { return __builtin_nearbyintf(__x); }
716
717   inline long double
718   nearbyint(long double __x)
719   { return __builtin_nearbyintl(__x); }
720
721   template<typename _Tp>
722     inline typename __gnu_cxx::__promote<_Tp>::__type 
723     nearbyint(_Tp __x)
724     {
725       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
726       return nearbyint(__type(__x));
727     }
728
729   inline float
730   nextafter(float __x, float __y)
731   { return __builtin_nextafterf(__x, __y); }
732
733   inline long double
734   nextafter(long double __x, long double __y)
735   { return __builtin_nextafterl(__x, __y); }
736
737   template<typename _Tp, typename _Up>
738     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
739     nextafter(_Tp __x, _Up __y)
740     {
741       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
742       return nextafter(__type(__x), __type(__y));
743     }
744
745   inline float
746   nexttoward(float __x, long double __y)
747   { return __builtin_nexttowardf(__x, __y); }
748
749   inline long double
750   nexttoward(long double __x, long double __y)
751   { return __builtin_nexttowardl(__x, __y); }
752
753   template<typename _Tp>
754     inline typename __gnu_cxx::__promote<_Tp>::__type
755     nexttoward(_Tp __x, long double __y)
756     {
757       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
758       return nexttoward(__type(__x), __y);
759     }
760
761   // DR 550. What should the return type of pow(float,int) be?
762   // NB: C++0x and TR1 != C++03.
763   //   using std::pow;
764
765   inline float
766   remainder(float __x, float __y)
767   { return __builtin_remainderf(__x, __y); }
768
769   inline long double
770   remainder(long double __x, long double __y)
771   { return __builtin_remainderl(__x, __y); }
772
773   template<typename _Tp, typename _Up>
774     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
775     remainder(_Tp __x, _Up __y)
776     {
777       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
778       return remainder(__type(__x), __type(__y));
779     }
780
781   inline float
782   remquo(float __x, float __y, int* __pquo)
783   { return __builtin_remquof(__x, __y, __pquo); }
784
785   inline long double
786   remquo(long double __x, long double __y, int* __pquo)
787   { return __builtin_remquol(__x, __y, __pquo); }
788
789   template<typename _Tp, typename _Up>
790     inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
791     remquo(_Tp __x, _Up __y, int* __pquo)
792     {
793       typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
794       return remquo(__type(__x), __type(__y), __pquo);
795     }
796
797   inline float
798   rint(float __x)
799   { return __builtin_rintf(__x); }
800
801   inline long double
802   rint(long double __x)
803   { return __builtin_rintl(__x); }
804
805   template<typename _Tp>
806     inline typename __gnu_cxx::__promote<_Tp>::__type
807     rint(_Tp __x)
808     {
809       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
810       return rint(__type(__x));
811     }
812
813   inline float
814   round(float __x)
815   { return __builtin_roundf(__x); }
816
817   inline long double
818   round(long double __x)
819   { return __builtin_roundl(__x); }
820
821   template<typename _Tp>
822     inline typename __gnu_cxx::__promote<_Tp>::__type
823     round(_Tp __x)
824     {
825       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
826       return round(__type(__x));
827     }
828
829   inline float
830   scalbln(float __x, long __ex)
831   { return __builtin_scalblnf(__x, __ex); }
832
833   inline long double
834   scalbln(long double __x, long __ex)
835   { return __builtin_scalblnl(__x, __ex); }
836
837   template<typename _Tp>
838     inline typename __gnu_cxx::__promote<_Tp>::__type 
839     scalbln(_Tp __x, long __ex)
840     {
841       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
842       return scalbln(__type(__x), __ex);
843     }
844  
845   inline float
846   scalbn(float __x, int __ex)
847   { return __builtin_scalbnf(__x, __ex); }
848
849   inline long double
850   scalbn(long double __x, int __ex)
851   { return __builtin_scalbnl(__x, __ex); }
852
853   template<typename _Tp>
854     inline typename __gnu_cxx::__promote<_Tp>::__type 
855     scalbn(_Tp __x, int __ex)
856     {
857       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
858       return scalbn(__type(__x), __ex);
859     }
860
861   using std::sin;
862   using std::sinh;
863   using std::sqrt;
864   using std::tan;
865   using std::tanh;
866
867   inline float
868   tgamma(float __x)
869   { return __builtin_tgammaf(__x); }
870
871   inline long double
872   tgamma(long double __x)
873   { return __builtin_tgammal(__x); }
874
875   template<typename _Tp>
876     inline typename __gnu_cxx::__promote<_Tp>::__type 
877     tgamma(_Tp __x)
878     {
879       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
880       return tgamma(__type(__x));
881     }
882  
883   inline float
884   trunc(float __x)
885   { return __builtin_truncf(__x); }
886
887   inline long double
888   trunc(long double __x)
889   { return __builtin_truncl(__x); }
890
891   template<typename _Tp>
892     inline typename __gnu_cxx::__promote<_Tp>::__type 
893     trunc(_Tp __x)
894     {
895       typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
896       return trunc(__type(__x));
897     }
898
899 #endif
900
901 _GLIBCXX_END_NAMESPACE_TR1
902 }